{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第六步：调整完参数后，重新调整n_estimate参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 获取特征，标签\n",
    "y = train['interest_level']\n",
    "X = train.drop(['interest_level'], axis=1)\n",
    "\n",
    "# 由于数据集较大，在此随机采样30%的数据构建训练样本，其余作为测试样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.7, stratify=y)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "# 各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再次调整弱分类器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=10):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 3\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds.split(X_train,y_train),\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print(cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds4_4_3_125.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_4_3_125.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print(\"logloss of train :\" )\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
      "0              1.039461           0.000609             1.037704   \n",
      "1              0.989629           0.001162             0.986292   \n",
      "2              0.947122           0.001471             0.942246   \n",
      "3              0.910428           0.001633             0.904022   \n",
      "4              0.878873           0.001454             0.871008   \n",
      "5              0.851453           0.001446             0.842047   \n",
      "6              0.827268           0.001409             0.816673   \n",
      "7              0.806650           0.001573             0.794351   \n",
      "8              0.788135           0.001629             0.774536   \n",
      "9              0.771968           0.001568             0.757050   \n",
      "10             0.757574           0.001657             0.741543   \n",
      "11             0.744952           0.001591             0.727533   \n",
      "12             0.733642           0.001707             0.715028   \n",
      "13             0.723799           0.001632             0.703708   \n",
      "14             0.714858           0.001627             0.693431   \n",
      "15             0.706980           0.001701             0.684210   \n",
      "16             0.700043           0.001769             0.675747   \n",
      "17             0.693450           0.001960             0.668077   \n",
      "18             0.687539           0.002013             0.661078   \n",
      "19             0.682186           0.001943             0.654663   \n",
      "20             0.677576           0.001940             0.648878   \n",
      "21             0.673519           0.001920             0.643511   \n",
      "22             0.669698           0.001771             0.638323   \n",
      "23             0.666422           0.001824             0.633664   \n",
      "24             0.663276           0.001797             0.629222   \n",
      "25             0.660144           0.001743             0.625000   \n",
      "26             0.657589           0.001647             0.621102   \n",
      "27             0.655168           0.001830             0.617468   \n",
      "28             0.653073           0.001869             0.614177   \n",
      "29             0.651105           0.001860             0.610977   \n",
      "..                  ...                ...                  ...   \n",
      "95             0.613419           0.003511             0.513505   \n",
      "96             0.613180           0.003433             0.512665   \n",
      "97             0.613130           0.003399             0.511770   \n",
      "98             0.612967           0.003335             0.510898   \n",
      "99             0.612889           0.003491             0.510084   \n",
      "100            0.612807           0.003519             0.509174   \n",
      "101            0.612578           0.003436             0.508319   \n",
      "102            0.612602           0.003461             0.507581   \n",
      "103            0.612467           0.003420             0.506785   \n",
      "104            0.612416           0.003512             0.505970   \n",
      "105            0.612327           0.003517             0.504968   \n",
      "106            0.612214           0.003488             0.504156   \n",
      "107            0.612032           0.003454             0.503324   \n",
      "108            0.611818           0.003474             0.502386   \n",
      "109            0.611837           0.003516             0.501487   \n",
      "110            0.611707           0.003446             0.500652   \n",
      "111            0.611650           0.003444             0.499851   \n",
      "112            0.611534           0.003526             0.499032   \n",
      "113            0.611435           0.003570             0.498168   \n",
      "114            0.611323           0.003568             0.497420   \n",
      "115            0.611310           0.003614             0.496654   \n",
      "116            0.611254           0.003690             0.495855   \n",
      "117            0.611214           0.003771             0.495077   \n",
      "118            0.611199           0.003757             0.494226   \n",
      "119            0.611294           0.003647             0.493445   \n",
      "120            0.611173           0.003716             0.492543   \n",
      "121            0.611082           0.003787             0.491816   \n",
      "122            0.611013           0.003903             0.491172   \n",
      "123            0.610866           0.003895             0.490358   \n",
      "124            0.610888           0.003874             0.489624   \n",
      "\n",
      "     train-mlogloss-std  \n",
      "0              0.000358  \n",
      "1              0.000451  \n",
      "2              0.000388  \n",
      "3              0.000564  \n",
      "4              0.000862  \n",
      "5              0.000973  \n",
      "6              0.000971  \n",
      "7              0.001116  \n",
      "8              0.001008  \n",
      "9              0.001047  \n",
      "10             0.001068  \n",
      "11             0.001185  \n",
      "12             0.001153  \n",
      "13             0.001291  \n",
      "14             0.001181  \n",
      "15             0.001140  \n",
      "16             0.001190  \n",
      "17             0.001016  \n",
      "18             0.000923  \n",
      "19             0.001023  \n",
      "20             0.000949  \n",
      "21             0.001048  \n",
      "22             0.001053  \n",
      "23             0.001001  \n",
      "24             0.001149  \n",
      "25             0.001081  \n",
      "26             0.001047  \n",
      "27             0.000910  \n",
      "28             0.000813  \n",
      "29             0.000878  \n",
      "..                  ...  \n",
      "95             0.000616  \n",
      "96             0.000563  \n",
      "97             0.000524  \n",
      "98             0.000515  \n",
      "99             0.000633  \n",
      "100            0.000744  \n",
      "101            0.000833  \n",
      "102            0.000951  \n",
      "103            0.001040  \n",
      "104            0.001046  \n",
      "105            0.000965  \n",
      "106            0.001022  \n",
      "107            0.001096  \n",
      "108            0.001140  \n",
      "109            0.001240  \n",
      "110            0.001203  \n",
      "111            0.001051  \n",
      "112            0.001060  \n",
      "113            0.001086  \n",
      "114            0.001079  \n",
      "115            0.001002  \n",
      "116            0.000877  \n",
      "117            0.000801  \n",
      "118            0.000833  \n",
      "119            0.000812  \n",
      "120            0.000776  \n",
      "121            0.000836  \n",
      "122            0.000894  \n",
      "123            0.000846  \n",
      "124            0.000743  \n",
      "\n",
      "[125 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.503183264939\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107dc15f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators\n",
    "xgb4_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=125,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb4_3, X_train, y_train, cv_folds = kfold)\n",
    "#from sklearn.model_selection import cross_val_score\n",
    "#results = cross_val_score(xgb2_3, X_train, y_train, metrics='mlogloss', cv=kfold)\n",
    "#print results\n",
    "#print(\"CV logloss: %.2f%% (%.2f%%)\" % (results.mean()*100, results.std()*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd8AAAHNCAYAAABfHnHIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3X2cVnP+x/HXZyZTupmJkiRJKOQm\nYqUVkUjub5PbZN2uxW+tm7LI3WLXEit3iy0sEetehJUlFUopym0llZI03TfVfH9/nHNd58zVdc1c\nczVzneuaeT8fj/Poe875nnM+18w0n/l+z/d7jjnnEBERkewpiDoAERGR+kbJV0REJMuUfEVERLJM\nyVdERCTLlHxFRESyTMlXREQky5R8RUREskzJV0REJMuUfEVERLJMyVfizOxxM1trZnsk2XetmTkz\nOyZhe7G/b6KZLTWzdWa20MzeNLPTzaxhqG57/xzhZZmZTTWzK8ysMBufszJmdomZDYg6jk1hZo3N\nbIiZ9Uyyb4D/dW8fQVxt/Li6ZPvaUTKz4Wa2Iuo4APyvvzOzllHHUt8p+UrYFcBPwAgz2yy20U/G\nNwHDnXOvhrbvDHwGXAd8CJwNHAr8AZgHPA78Ocl1/gEc4C+nAuOAe4C/1vxHqrZLgAFRB7GJGgM3\nAj2T7Hsd7+u+IJsB+drgxVWvkq9IMg2iDkByh3NumZmdB4zBS5o3+kn4SWAhXnIGwMwaAC8BWwK/\ncc7NSDjdc2Z2M7B3kkv94JybEFp/08x2B/oDV9bYB5KNOOd+Bn6OOo6aZGaNnXOroo5DpDrU8pUK\nnHPvAA8Bg82sKzAE2As4zzlXGqp6ArAbcFuSxBs71xzn3EtpXroUWBfeYGYFZna1mc30u8MXmdkT\nZtY28WAzG+h3X68xsyVm9qKZ7ZpQp4OZjTSz+f75FprZu7FuUDObDXQGDg51i8+uLGi/zv1mdpaZ\nzTCzVX4cR6f5ucPnKjKzP4c+789m9i8z2yqh3qFmNtbMfjGz1Wb2g5m94Hc3tydIrjeGPsdw/9iN\nup39c003swPM7CP/nLPN7Fx//1FmNtn/bNPMrE9CPDv5cX7j15lnZq+Gb1/4XeCf+Kv/CsU1JFTn\nWDMb759juZm9bWYHJFwr1m26j5k9b2a/At/5+yr9/qb4ml/hn2+nJPvuNLOyWBetme1tZq/5P4dr\n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\nZhn7f2bYlmT7EeAQAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1414f080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('my_preds4_4_3_125.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(20,cvresult.shape[0]+20)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(5, 5), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail4_4_3_125.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "其他最优参数代入后，得到的最佳 n_estimators=124"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
